package Stack;

import javax.management.ObjectName;
import LinearList.Node;

// 链栈
public class SqStackChain implements IStack{
    // 栈顶
    private Node top;

    // 将栈顶置为空
    public void clear() {
        top = null;
    }

    // 判断栈是否为null
    public boolean isEmpty() {
        return top==null;
    }

    // 返回栈顶的长度
    public int length() {
        Node p = top;
        int pLength = 0;
        while(p!=null){
            p=p.next;
            pLength++;
        }
        return pLength;
    }

    // 返回栈顶元素
    public Object peek() {
        if(isEmpty()){
            return null;
        }else {
            return top.data;
        }
    }

    // 入栈
    public void push(Object x) throws Exception {
        // 把 入栈的这个后继结点指向 栈顶
        // 再把 s 变为 top 就可以了
        Node s = new Node(x);
        s.next = top;
        top = s;
    }

    // 出栈
    public Object pop() throws Exception {
        if(isEmpty()){
            return null;
        }else{
            // 临时结点 p存储top结点
            // 把top结点的后继指向null (这里就代表删除了)
            Node p = top;
            top = top.next;
            return p.data;
        }
    }

    // 展示所有的数据
    public void display() {
        Node p = top;
        while(p != null){
            System.out.println(p.data+"  ");
            p = p.next;
        }
    }
}
